package ar.edu.utn.frba.tacs.warnes.rest;

import java.util.List;

import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.ws.rs.DELETE;
import javax.ws.rs.GET;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

import ar.edu.utn.frba.tacs.warnes.entities.Auto;
import ar.edu.utn.frba.tacs.warnes.pojos.AutoPojo;
import ar.edu.utn.frba.tacs.warnes.pojos.AutoPojoList;
import ar.edu.utn.frba.tacs.warnes.pojos.PiezaPojoList;
import ar.edu.utn.frba.tacs.warnes.utils.ContenedorWarnes;

/**
 * 
 * @author Diego
 * 
 */
@WebService
@Path("/autos/")
@Produces( { MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON })
public class AutoResource extends WarnesResource {
	public AutoResource() {
		super();
	}

	/**
	 * Obtiene la lista de autos
	 * 
	 * @return
	 */
	@WebMethod
	@GET
	@Path("/autos")
	public AutoPojoList getAutos() {
		List<Auto> autos = ContenedorWarnes.getInstance().getAutos();
		AutoPojoList autosPojo = new AutoPojoList(autos);
		return autosPojo;
	}

	/**
	 * Obtiene un unico auto por id
	 * 
	 * @param id
	 * @return
	 */
	@WebMethod
	@GET
	@Path("id/{id}")
	public AutoPojo getAutoPorId(@PathParam("id") Long id) {
		Auto auto = ContenedorWarnes.getInstance().getAuto(id);
		AutoPojo autoPojo = new AutoPojo(auto);
		return autoPojo;
	}

	/**
	 * Obtiene un unico auto
	 * 
	 * @param id
	 * @return
	 */
	@WebMethod
	@GET
	@Path("patente/{patente}")
	public AutoPojo getAutoPorPatente(@PathParam("patente") String patente) {
		Auto auto = ContenedorWarnes.getInstance().getAuto(patente);
		AutoPojo autoPojo = new AutoPojo(auto);
		return autoPojo;
	}

	/**
	 * Crea un nuevo auto
	 * 
	 * @param auto
	 * @return
	 */
	@WebMethod
	@POST
	@Path("/agregar/{patente}")
	public void addAuto(@PathParam("patente") String patente) {
		ContenedorWarnes.getInstance().creaUnAuto(patente).save();
	}

	/**
	 * Borra el auto indicado
	 * 
	 * @param id
	 * @return
	 */
	@WebMethod
	@DELETE
	@Path("/borrar/{patente}")
	public void deleteAuto(@PathParam("patente") String patente) {
		ContenedorWarnes.getInstance().borrarAuto(patente);
	}

	/**
	 * Obtiene las piezas del auto
	 * 
	 * @param id
	 * @return
	 */
	@WebMethod
	@GET
	@Path("id/{id}/piezas")
	public PiezaPojoList getPiezasDelAutoPorId(@PathParam("id") Long id) {
		Auto auto = ContenedorWarnes.getInstance().getAuto(id);
		PiezaPojoList piezaPojoList = new PiezaPojoList(auto.getPiezasDelAuto());
		return piezaPojoList;
	}
}
